/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-12-15 下午1:40 Created by dwzhang
 */
package com.jade.bss.ec.ware;

import java.util.List;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * 商品属性管理接口。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-12-15 下午1:40
 */
public interface WareAttrManager
{
    /**
     * 新增属性组。
     *
     * @param group 属性组
     * @throws WareException 处理异常
     */
    public void addGroup(WareAttrGroup group)
            throws WareException;

    /**
     * 更新属性组信息。
     *
     * @param group 属性组
     * @throws WareException 处理异常
     */
    public void updateGroup(WareAttrGroup group)
            throws WareException;

    /**
     * 删除属性组。
     *
     * @param ids 属性组标识
     * @throws WareException 处理异常
     */
    public void removeGroup(long... ids)
            throws WareException;

    /**
     * 获取属性组信息。
     *
     * @param id 属性组标识
     * @return 属性组
     * @throws WareException 处理异常
     */
    public WareAttrGroup getGroup(long id)
            throws WareException;

    /**
     * 列出一个分类下面的所有属性组。
     *
     * @param cid 商品分类
     * @return 属性组列表
     */
    public List<WareAttrGroup> listGroup(long cid);

    /**
     * 根据条件列出一个分类下面的所有属性组。
     *
     * @param cid 商品分类
     * @param criteria 检索条件
     * @return 属性组列表
     */
    public List<WareAttrGroup> listGroup(long cid, Criteria criteria);

    /**
     * 根据条件分页列出一个分类下面的所有属性组。
     *
     * @param cid 商品分类
     * @param criteria 检索条件
     * @return 属性组列表
     */
    public PagingList<WareAttrGroup> queryGroup(long cid, Criteria criteria);

    /**
     * 新增属性。
     *
     * @param attribute 属性
     * @throws WareException 处理异常
     */
    public void addAttr(WareAttribute attribute)
            throws WareException;

    /**
     * 编辑属性。
     *
     * @param attribute 属性
     * @throws WareException 处理异常
     */
    public void updateAttr(WareAttribute attribute)
            throws WareException;

    /**
     * 删除属性。
     *
     * @param ids 属性
     * @throws WareException 处理异常
     */
    public void removeAttr(long... ids)
            throws WareException;

    /**
     * 获取属性信息。
     *
     * @param id 属性
     * @return  属性信息
     */
    public WareAttribute getAttr(long id)
            throws WareException;

    /**
     * 列出一个分类下面的所有属性。
     *
     * @param cid 商品分类
     * @return 属性列表
     */
    public List<WareAttribute> listAttr(long cid);

    /**
     * 列出一个分类下面的所有属性以及商品的自定义属性。
     *
     * @param cid 商品分类
     * @return 属性列表
     */
    public List<WareAttribute> listAttr(long cid, long wareId);

    /**
     * 根据条件列出一个分类下面的所有属性。
     *
     * @param cid 商品分类
     * @param criteria 检索条件
     * @return 属性列表
     */
    public List<WareAttribute> listAttr(long cid, Criteria criteria);

    /**
     * 根据条件分页列出一个分类下面的所有属性。
     *
     * @param cid 商品分类
     * @param criteria 检索条件
     * @return 属性列表
     */
    public PagingList<WareAttribute> queryAttr(long cid, Criteria criteria);
}
